/**
 * 
 */
package cn.remex.web.service;

import cn.remex.RemexConstants.UserType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static cn.remex.RemexConstants.UserType.ADMIN;

/** 
 * @author liuhengyang 
 * date 2014-12-9 上午11:42:49
 * @version 版本号码
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD,ElementType.TYPE})
public @interface BusinessService {
    //服务的基本配置
	String name() default "";//服务的名称
    String desc() default "";//服务的描述
    ServiceType type() default ServiceType.normal;//服务类型
	boolean withMultiPart() default false;//服务是否包含复杂的文件部分
    String bodyParamName() default "";//是否将服务报文赋值给指定参数名的参数中。

	//服务是否需要身份认证
    boolean needAuth() default true;
    UserType authLevel() default ADMIN;
	//服务是否需要权限验证以及对应权限的角色
	ServiceRole[] authRoles() default {};

	//服务缓存设置
	boolean needCache() default false;
	int[] cachedArgIndexs() default {};
    long cachedExpired() default 24*3600;


	//====================================//
	//服务类型定义
	enum ServiceType {
		normal,AsyncService
	}
	//系统内置角色，各个模块自己定义的内置角色请集成本枚举类型
	enum  ServiceRole {
		root(1000), admin(1001), user(2000);
		private int id;
		ServiceRole(int i) {
			id = i;
		}

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}
	}
}
